#e
#Title[։Ёuԃ^Cv]
#Text[]
#Image[]
#BackGround[]
#BGM[]
#PlayLevel[Extra]
#ScriptVersion[2]
#Player[FREE]


script_enemy_main
{
let wt=60;
let usebomb=0;

	//GoɈxs镔
	@Initialize
	{
	//   eϐ

	//   XyJ[hf[^
	SetLife(800);
	SetScore(100000);
	SetDamageRate(30,  0);
	SetTimer(80);
	SetInvincibility(250);
	LoadGraphic("script\img\ExRumia.png");
	CutIn(KOUMA,"։Ёuԃ^Cv",GetCurrentScriptDirectory~"..\img\cutin04.png",0,0,255,320);
	}
	//   ʒu܂ňړ
	SetMovePosition02(GetCenterX, GetCenterY-120, 60);

	BG_Standard;
	AtackTaskA;
	AtackTaskEx;
	MoveTask;
	ControlTask;
	//G̃Ct0ɂȂ܂ŁA̕1t[1s
	@MainLoop
	{
		yield;


		if(OnBomb==false){
			SetCollisionA(GetX, GetY, 32);
			SetCollisionB(GetX, GetY, 24);
			usebomb=0;
		}
		else{
			usebomb++;
		}
		if(usebomb==1){
			BombBarrier;
		}
	}
	
	//`惋[vB1t[1s
	@DrawLoop
	{
		SetGraphicRect(0,1,63,64);
		if(GetSpeedX<0){
			SetGraphicRect(128,1,191,64);
		}
		if(GetSpeedX>0){
			SetGraphicRect(192,1,255,64);
		}
		SetColor(255,255,255);
		SetAlpha(255);
		if(OnBomb==true){SetAlpha(96);}
		SetTexture("script\img\ExRumia.png");//摜͔q
		DrawGraphic(GetX(),GetY());//G̍WEx[~A`;
	}
		
	//GłuԂɈxs镔
	@Finalize
	{
		CreateItem(ITEM_1UP,GetX,GetY);
		DeleteGraphic("script\img\ExRumia.png");
		DeleteGraphic(GetCurrentScriptDirectory ~"..img\back1.png");
		DeleteGraphic(GetCurrentScriptDirectory ~"..img\back2.png");
	}
	//XyJ[h̔wi
	//Ă悢
	@BackGround
	{
		BG_Simple;
	}

	task AtackTaskA{
		wait(120);
		SetShotAutoDeleteClip(64,128,64,64);

		while(true){
			TireA(GetX,GetY,rand(-2,2),rand(-1,-3),0.05,12,20,BLUE01,GREEN01,30);
			wait(wt);
		}
	}
	task AtackTaskB{
		let count=600;
		let spd=3;
		let ref=4;
		while(true){
			let dir=4;
			if(GetX<GetPlayerX){dir=-4;}
			TireB(GetX,GetY,spd,ref,12,20,dir,YELLOW01,30);
			wait(count);
			if(count>300){
				count-=100;
				ref+=1;
			}
		}
	}

	task AtackTaskC{
		let count=400;
		while(true){
			let rot=-6;
			let spd=1;
			if(GetX<GetPlayerX){rot=6;}
			TireC(GetX,GetY,spd,90,40,10,12,20,rot,AQUA01,AQUA01,30);
			wait(count);
			if(count>300){
				count-=10;
			}
		}
	}

	task AtackTaskEx{
		let count=300;
		let set=30;
		let timer=300;
		wait(300);
		while(true){
			let dir=4;
			if(GetX<GetPlayerX){dir=-4;}
			TireEx(GetX,GetY,set,timer,12,20,dir,WHITE01,RED01,30);
			wait(count);
			if(count>200){
				count-=20;
			}
		}
	}

	task TireA(		//BŖA1oEh
		x,		//SW
		y,
		vx,		//ړ
		vy,
		grav,		//d
		ammo,		//qe̗
		dis,		//qe܂ł̋
		grfa,
		grfb,		//oEh
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,x,y);
		Obj_SetAngle(obj,0);
		Obj_SetSpeed(obj,0);
		let bound=0;
		let dir=rand(0,360);
		loop(ammo){
			TireSub(obj,dir,dis,vx,grfa,grfb,delay);
			dir+=360/ammo;
		}
		wait(delay);

		while(!Obj_BeDeleted(obj)){
			Obj_SetPosition(obj,x,y);
			if(x<GetClipMinX){
				x=GetClipMinX;
				vx=0-vx*0.8;
			}
			if(x>GetClipMaxX){
				x=GetClipMaxX;
				vx=0-vx*0.8;
			}
			if(y>GetClipMaxY&&bound<1){
				y=GetClipMaxY;
				vy=0-vy*0.8;
				bound++;
			}
			x+=vx;
			y+=vy;
			vy+=grav;
			yield;
		}

	}

	task TireB(		//񐔕ǔ˂Ŏ@_
		x,		//SW
		y,
		spd,		//ړ
		ref,		//oEh
		ammo,		//qe̗
		dis,		//qe܂ł̋
		rot,		//]
		grf,
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,x,y);
		let bound=0;
		let dir=rand(0,360);
		loop(ammo){
			TireSub(obj,dir,dis,rot,grf,grf,delay);
			dir+=360/ammo;
		}
		wait(delay);
		Obj_SetAngle(obj,atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj)));
		Obj_SetSpeed(obj,spd);

		while(!Obj_BeDeleted(obj)){
			if(Obj_GetX(obj)<GetClipMinX||Obj_GetX(obj)>GetClipMaxX||Obj_GetY(obj)<GetClipMinY||Obj_GetY(obj)>GetClipMaxY){
				if(bound<ref){
					Obj_SetAngle(obj,Obj_GetAngle(obj));
					Obj_SetSpeed(obj,-spd);
					yield;
					Obj_SetAngle(obj,atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj)));
					Obj_SetSpeed(obj,spd);
					bound++;
				}
			}
			yield;
		}
	}

	task TireSub(		//^Cqe(ʏ)
		id,		//eID
		dir,		//
		dis,		//
		rot,		//]
		grfa,
		grfb,
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
		Obj_SetAngle(obj,dir);
		Obj_SetSpeed(obj,0);
		ObjShot_SetDelay(obj,delay);
		ObjShot_SetGraphic(obj,grfa);

		wait(delay);
		while(!Obj_BeDeleted(id)){
			Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
			Obj_SetAngle(obj,dir);
			dir+=rot;
			if(Obj_GetX(id)<GetClipMinX||Obj_GetX(id)>GetClipMaxX){
				rot=0-rot;
			}
			if(Obj_GetY(id)>GetClipMaxY){
				ObjShot_SetGraphic(obj,grfb);
			}
			yield;
		}
		Obj_Delete(obj);
	}

	task TireC(		//nti
		x,		//SW
		y,
		spd,
		angle,
		bladex,		//n̒
		bladey,		//n̑
		ammo,		//qe̗
		dis,		//qe܂ł̋
		rot,
		grfa,		//qeOtBbN
		grfb,		//[U[OtBbN
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,x,y);
		let dir=rand(0,360);
		loop(ammo){
			TireSub(obj,dir,dis,rot,grfa,grfa,delay);
			TireBlade(obj,dir,dis,rot,bladex,bladey,grfb,delay);
			dir+=360/ammo;
		}
		wait(delay);
		Obj_SetAngle(obj,angle);
		Obj_SetSpeed(obj,spd);

		while(!Obj_BeDeleted(obj)){

			yield;
		}

	}
	task TireBlade(		//u[h
		id,		//eID
		dir,		//
		dis,		//
		rot,		//]
		bladex,		//
		bladey,		//
		grf,
		delay
	){
		let obj=Obj_Create(OBJ_LASER);
		Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
		Obj_SetAngle(obj,dir);
		Obj_SetSpeed(obj,0);
		ObjShot_SetDelay(obj,delay);
		ObjShot_SetGraphic(obj,grf);
		ObjLaser_SetLength(obj,bladex);
		ObjLaser_SetWidth(obj,bladey);
		ObjLaser_SetSource(obj,false);

		while(!Obj_BeDeleted(id)){
			Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
			Obj_SetAngle(obj,dir);
			dir+=rot;
			yield;
		}
		Obj_Delete(obj);
	}

	task TireEx(		//^C
		x,		//SW
		y,
		set,		//ݒu܂ł̎
		count,		//ݒuA܂ł̎
		ammo,		//qe̗
		dis,		//qe܂ł̋
		rot,		//]
		grfa,		//ʏJ[
		grfb,		//_ŃJ[
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,x,y);
		let dir=rand(0,360);
		loop(ammo){
			TireExSub(obj,dir,dis,rot,count+set,grfa,grfb,delay);
			dir+=360/ammo;
		}
		wait(delay);
		Obj_SetAngle(obj,atan2(GetPlayerY-Obj_GetY(obj),GetPlayerX-Obj_GetX(obj)));
		Obj_SetSpeed(obj,DistanceToPlayer(Obj_GetX(obj),Obj_GetY(obj))/set);
		wait(set);
		Obj_SetSpeed(obj,0);

		while(!Obj_BeDeleted(obj)){
			if(count==0){
				Obj_Delete(obj);
			}
			yield;
			count--;
		}
	}


	task TireExSub(		//^Cqe()
		id,		//eID
		dir,		//
		dis,		//
		rot,		//]
		count,
		grfa,
		grfb,
		delay
	){
		let obj=Obj_Create(OBJ_SHOT);
		Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
		Obj_SetAngle(obj,dir);
		Obj_SetSpeed(obj,0);
		let alpha=64;
		Obj_SetAlpha(obj,alpha);
		Obj_SetCollisionToPlayer(obj,false);
		ObjShot_SetDelay(obj,delay);
		ObjShot_SetGraphic(obj,grfa);
		ObjShot_SetBombResist(obj,true);

		wait(delay);
		while(!Obj_BeDeleted(id)){
			Obj_SetPosition(obj,cos(dir)*dis+Obj_GetX(id),sin(dir)*dis+Obj_GetY(id));
			Obj_SetAngle(obj,dir);
			Obj_SetAlpha(obj,alpha);
			alpha++;
			dir+=rot;
			alternative(count)
			case(32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,63,66,69,72,75,78,81,84,87,90,100,110,120,130,140,150,160,170,180,190,200,220,240,260,280)
			{
				ObjShot_SetGraphic(obj,grfb);
			}
			others
			{
				ObjShot_SetGraphic(obj,grfa);
			}
			if(count<30){
				ObjShot_SetGraphic(obj,grfb);
			}
			yield;
			count--;
		}
		//eIuWF̏mFAlUB
		let dirb=Obj_GetAngle(obj);
		loop(4){
			CreateShotA(0,Obj_GetX(obj),Obj_GetY(obj),10);
			SetShotKillTime(0,15);
			SetShotDataA(0,0,6,dir+dirb,0,0,0,RED05);
			FireShot(0);
			dirb+=90;
		}

		Obj_Delete(obj);
	}

	task MoveTask{
		wait(120);
		while(true){
			SetMovePosition02(rand(GetCenterX+60,GetClipMaxX-120), rand(GetClipMinY+60,GetCenterY-120), 80);
			wait(180);
			SetMovePosition02(rand(GetCenterX-60,GetCenterX+60), rand(GetClipMinY+60,GetCenterY-120), 80);
			wait(180);
			SetMovePosition02(rand(GetClipMinX+120,GetCenterX-60), rand(GetClipMinY+60,GetCenterY-120), 80);
			wait(180);
			SetMovePosition02(rand(GetCenterX-60,GetCenterX+60), rand(GetClipMinY+60,GetCenterY-120), 80);
			wait(180);
		}
	}
	task ControlTask{
		wait(250);
		while(GetEnemyLife>600&&GetTimer>20){yield;}
		wt=50;
		AtackTaskC;
		while(GetEnemyLife>400&&GetTimer>20){yield;}
		wt=40;
		AtackTaskB;
		while(GetEnemyLife>200&&GetTimer>20){yield;}
		wt=30;
		while(GetTimer>20){yield;}
		wt=20;
	}

	#include_function".\function.txt"
}

